modelo do chatbot

工作流概述

这是一个包含12个节点的复杂工作流,主要用于自动化处理各种任务。

工作流源代码

下载
{
  "id": "BMI5WkmyU8nZqfII",
  "meta": {
    "instanceId": "e03b0f22ca12c92061d789d5980a9bc31d9d7e7dd7513ac93c09ac5a0d147623",
    "templateCredsSetupCompleted": true
  },
  "name": "modelo do chatbot",
  "tags": [],
  "nodes": [
    {
      "id": "c6e454af-70a1-4c65-8450-8159f7fc738b",
      "name": "If",
      "type": "n8n-nodes-base.if",
      "position": [
        160,
        560
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 1,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "7ea831a4-0e20-4725-a6f5-3dc2f41f1cf4",
              "operator": {
                "type": "object",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "={{ $json.leadData }}",
              "rightValue": ""
            },
            {
              "id": "ccb46339-4e43-42e6-aa45-d5a0cbd62214",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "2221736f-ef99-4ac8-8a81-51af6d4e7dcd",
      "name": "Edit Fields1",
      "type": "n8n-nodes-base.set",
      "position": [
        440,
        960
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "19a16867-b574-4b99-82f1-a86752b7fe9f",
              "name": "chatInput",
              "type": "string",
              "value": "=\"Hello, just so you can get to know me, with no intention of a response, please save this information in your memory. My name is {{ $json.leadData.name }}. I am {{ $json.leadData.age }} years old and currently live in {{ $json.leadData.city }}, {{ $json.leadData.state }}. My profession is {{ $json.leadData.profession }}, and my education level is {{ $json.leadData.educationLevel }}.
If I’m part of an adhesion group and have an entity, it would be {{ $json.leadData.entity }}.

I am using a {{ $json.leadData.deviceType }} device to access this through the {{ $json.leadData.channel }} channel. At the moment, I am looking for a health insurance plan of type {{ $json.leadData.quotationType }}.\""
            },
            {
              "id": "0df8d578-8332-4cde-9044-489de16ab390",
              "name": "session_id",
              "type": "string",
              "value": "={{ $json.session_id }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "6aa1b3a4-0e6a-4312-9d9f-f67c4bf8f443",
      "name": "Edit Fields2",
      "type": "n8n-nodes-base.set",
      "position": [
        920,
        960
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "19a16867-b574-4b99-82f1-a86752b7fe9f",
              "name": "chatInput",
              "type": "string",
              "value": "={{ $('Chat Trigger').item.json.chatInput}}"
            },
            {
              "id": "0df8d578-8332-4cde-9044-489de16ab390",
              "name": "session_id",
              "type": "string",
              "value": "={{ $('Chat Trigger').item.json.session_id }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "6afe6158-7a8b-4a83-a778-6fd28e2a11af",
      "name": "OpenAI",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        600,
        960
      ],
      "parameters": {
        "options": {},
        "resource": "assistant",
        "assistantId": {
          "__rl": true,
          "mode": "list",
          "value": "asst_numdCoMZPQ6GwfiJg5drg9hr",
          "cachedResultName": "Chat IA - Testes - Dezembro - APIS"
        }
      },
      "credentials": {
        "openAiApi": {
          "id": "FW1FWHcMcwemQ1kZ",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1.4
    },
    {
      "id": "4b961f1d-7da2-4a0b-98e3-7ec35ee14335",
      "name": "Chat Trigger",
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "position": [
        -20,
        560
      ],
      "webhookId": "1f83e8ac-d465-454a-8327-cef7f0149cb1",
      "parameters": {
        "public": true,
        "options": {},
        "initialMessages": "Olá 👋
Sou Jovelino, o serviço de IA do Joov, me mande sua pergunta e responderei em seguida! :)"
      },
      "typeVersion": 1
    },
    {
      "id": "dccdb07f-97db-4a5a-9b09-02a5de65246e",
      "name": "Postgres Chat Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryPostgresChat",
      "position": [
        640,
        720
      ],
      "parameters": {
        "tableName": "aimessages",
        "sessionKey": "={{ $('Chat Trigger').item.json.session_id }}{{ $json.sessionId }}",
        "sessionIdType": "customKey",
        "contextWindowLength": 30
      },
      "credentials": {
        "postgres": {
          "id": "M1cYa0bOSX1nfczy",
          "name": "Postgres account"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "553dd27b-ab06-4605-99e0-8f15735cfff3",
      "name": "Postgres Chat Memory1",
      "type": "@n8n/n8n-nodes-langchain.memoryPostgresChat",
      "position": [
        760,
        1160
      ],
      "parameters": {
        "tableName": "aimessages",
        "sessionKey": "={{ $('Chat Trigger').item.json.session_id }}{{ $json.sessionId }}",
        "sessionIdType": "customKey",
        "contextWindowLength": 1
      },
      "credentials": {
        "postgres": {
          "id": "M1cYa0bOSX1nfczy",
          "name": "Postgres account"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "0103fb97-c691-4bd3-b26d-85aaa9774594",
      "name": "Products in Daatabase",
      "type": "n8n-nodes-base.mySqlTool",
      "position": [
        1460,
        600
      ],
      "parameters": {
        "query": "SELECT * 
FROM Products p 
WHERE 
 cityQuery = '{{ $fromAI(\"cityQuery\") }}' AND 
 state = '{{ $fromAI(\"state\") }}' AND 
 modality = 'PME' AND 
 removed = 0 AND 
 ({{ $fromAI(\"holderCount\") || 1 }} + {{ $fromAI(\"dependentsCount\") || 0 }}) BETWEEN p.minLifeAmount AND p.maxLifeAmount AND
 (CASE
 WHEN {{ $fromAI(\"holderAge\") }} BETWEEN 0 AND 18 THEN priceAtAge0To18
 WHEN {{ $fromAI(\"holderAge\") }} BETWEEN 19 AND 23 THEN priceAtAge19To23
 WHEN {{ $fromAI(\"holderAge\") }} BETWEEN 24 AND 28 THEN priceAtAge24To28
 WHEN {{ $fromAI(\"holderAge\") }} BETWEEN 29 AND 33 THEN priceAtAge29To33
 WHEN {{ $fromAI(\"holderAge\") }} BETWEEN 34 AND 38 THEN priceAtAge34To38
 WHEN {{ $fromAI(\"holderAge\") }} BETWEEN 39 AND 43 THEN priceAtAge39To43
 WHEN {{ $fromAI(\"holderAge\") }} BETWEEN 44 AND 48 THEN priceAtAge44To48
 WHEN {{ $fromAI(\"holderAge\") }} BETWEEN 49 AND 53 THEN priceAtAge49To53
 WHEN {{ $fromAI(\"holderAge\") }} BETWEEN 54 AND 58 THEN priceAtAge54To58
 ELSE priceAtAge59To199
 END) IS NOT NULL
ORDER BY 
 (CASE
 WHEN {{ $fromAI(\"holderAge\") }} BETWEEN 0 AND 18 THEN priceAtAge0To18
 WHEN {{ $fromAI(\"holderAge\") }} BETWEEN 19 AND 23 THEN priceAtAge19To23
 WHEN {{ $fromAI(\"holderAge\") }} BETWEEN 24 AND 28 THEN priceAtAge24To28
 WHEN {{ $fromAI(\"holderAge\") }} BETWEEN 29 AND 33 THEN priceAtAge29To33
 WHEN {{ $fromAI(\"holderAge\") }} BETWEEN 34 AND 38 THEN priceAtAge34To38
 WHEN {{ $fromAI(\"holderAge\") }} BETWEEN 39 AND 43 THEN priceAtAge39To43
 WHEN {{ $fromAI(\"holderAge\") }} BETWEEN 44 AND 48 THEN priceAtAge44To48
 WHEN {{ $fromAI(\"holderAge\") }} BETWEEN 49 AND 53 THEN priceAtAge49To53
 WHEN {{ $fromAI(\"holderAge\") }} BETWEEN 54 AND 58 THEN priceAtAge54To58
 ELSE priceAtAge59To199
 END) ASC, 
 createdAt DESC
LIMIT 3;
",
        "options": {
          "detailedOutput": true
        },
        "operation": "executeQuery",
        "descriptionType": "manual",
        "toolDescription": "// Search for the X product bla bla bla"
      },
      "credentials": {
        "mySql": {
          "id": "lkGJt8aNB0azyaGy",
          "name": "MySQL account 2"
        }
      },
      "typeVersion": 2.4
    },
    {
      "id": "0cdfd89f-eb9e-4b6c-90d1-1cf8d6ed96bb",
      "name": "Knowledge Base",
      "type": "@n8n/n8n-nodes-langchain.toolHttpRequest",
      "position": [
        1340,
        600
      ],
      "parameters": {
        "url": "https://quotation.joov.com.br/widget/info?modalidade={modalidade}&estado=SP&cidade={city}&operadora={operadora}",
        "toolDescription": "Here you will find the knowlegde base of my shop and bla bla bla Use this when they ask for price, whatever i want."
      },
      "typeVersion": 1.1
    },
    {
      "id": "393f792a-4eff-4b33-aac0-025fc622a4b3",
      "name": "External API",
      "type": "@n8n/n8n-nodes-langchain.toolHttpRequest",
      "position": [
        1200,
        600
      ],
      "parameters": {
        "url": "https://integracao-sed-alb-323570099.us-east-1.elb.amazonaws.com/findByNameAndBirthDate",
        "method": "POST",
        "jsonBody": "={
 \"name\": \"{{json.name}}\",
 \"birthdate\": \"{{json.birthdate }}\"
}",
        "sendBody": true,
        "specifyBody": "json",
        "toolDescription": "Pegue o nome completo em camel case, exemplo: Fernanda Melo, e a data de nacimento nesse formato: 1990-03-28"
      },
      "typeVersion": 1.1
    },
    {
      "id": "7ce7a5e7-6238-4479-a26f-bdcde1784188",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1160,
        414
      ],
      "parameters": {
        "color": 5,
        "width": 436.73182569600795,
        "height": 367.7413881276459,
        "content": "TOOLS"
      },
      "typeVersion": 1
    },
    {
      "id": "df6737ca-c588-48fc-9761-2a5307841298",
      "name": "OpenAI2",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        460,
        460
      ],
      "parameters": {
        "text": "={{ $json.chatInput }}",
        "prompt": "define",
        "options": {},
        "resource": "assistant",
        "assistantId": {
          "__rl": true,
          "mode": "list",
          "value": "asst_x2qfc7EuoPv7XGOL84ClEZ3L",
          "cachedResultName": "PINE"
        }
      },
      "credentials": {
        "openAiApi": {
          "id": "FW1FWHcMcwemQ1kZ",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1.4
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "d1dc3988-6677-47c9-b91a-6875c7b6151d",
  "connections": {
    "If": {
      "main": [
        [
          {
            "node": "Edit Fields1",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "OpenAI2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI": {
      "main": [
        [
          {
            "node": "Edit Fields2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Chat Trigger": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields1": {
      "main": [
        [
          {
            "node": "OpenAI",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields2": {
      "main": [
        [
          {
            "node": "OpenAI2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "External API": {
      "ai_tool": [
        [
          {
            "node": "OpenAI2",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Knowledge Base": {
      "ai_tool": [
        [
          {
            "node": "OpenAI2",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Postgres Chat Memory": {
      "ai_memory": [
        [
          {
            "node": "OpenAI2",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Postgres Chat Memory1": {
      "ai_memory": [
        [
          {
            "node": "OpenAI",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Products in Daatabase": {
      "ai_tool": [
        [
          {
            "node": "OpenAI2",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    }
  }
}

功能特点

  • 自动检测新邮件
  • AI智能内容分析
  • 自定义分类规则
  • 批量处理能力
  • 详细的处理日志

技术分析

节点类型及作用

  • If
  • Set
  • @N8N/N8N Nodes Langchain.Openai
  • @N8N/N8N Nodes Langchain.Chattrigger
  • @N8N/N8N Nodes Langchain.Memorypostgreschat

复杂度评估

配置难度:
★★★★☆
维护难度:
★★☆☆☆
扩展性:
★★★★☆

实施指南

前置条件

  • 有效的Gmail账户
  • n8n平台访问权限
  • Google API凭证
  • AI分类服务订阅

配置步骤

  1. 在n8n中导入工作流JSON文件
  2. 配置Gmail节点的认证信息
  3. 设置AI分类器的API密钥
  4. 自定义分类规则和标签映射
  5. 测试工作流执行
  6. 配置定时触发器(可选)

关键参数

参数名称 默认值 说明
maxEmails 50 单次处理的最大邮件数量
confidenceThreshold 0.8 分类置信度阈值
autoLabel true 是否自动添加标签

最佳实践

优化建议

  • 定期更新AI分类模型以提高准确性
  • 根据邮件量调整处理批次大小
  • 设置合理的分类置信度阈值
  • 定期清理过期的分类规则

安全注意事项

  • 妥善保管API密钥和认证信息
  • 限制工作流的访问权限
  • 定期审查处理日志
  • 启用双因素认证保护Gmail账户

性能优化

  • 使用增量处理减少重复工作
  • 缓存频繁访问的数据
  • 并行处理多个邮件分类任务
  • 监控系统资源使用情况

故障排除

常见问题

邮件未被正确分类

检查AI分类器的置信度阈值设置,适当降低阈值或更新训练数据。

Gmail认证失败

确认Google API凭证有效且具有正确的权限范围,重新进行OAuth授权。

调试技巧

  • 启用详细日志记录查看每个步骤的执行情况
  • 使用测试邮件验证分类逻辑
  • 检查网络连接和API服务状态
  • 逐步执行工作流定位问题节点

错误处理

工作流包含以下错误处理机制:

  • 网络超时自动重试(最多3次)
  • API错误记录和告警
  • 处理失败邮件的隔离机制
  • 异常情况下的回滚操作